#include "UDPserver.hpp"
#include <iostream>
#include <memory>
#include "Route.hpp"
#include "ThreadPool.hpp"
using namespace ThreadPoolModule;
string func(const string &messages)
{
    string hello = "hello. ";
    hello += messages;
    return hello;
}
using task_t = std::function<void()>;
int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        std::cerr << "Usage: " << argv[0] << "port" << endl;
        return 1;
    }
    uint16_t port = std::stoi(argv[1]);
    Enable_Console_Log_Strategy();
    // 1.路由服务
    Route r;
    // 2.线程池
    auto tp = ThreadPool<task_t>::GetInstance();
    // 3.网络服务对象
    unique_ptr<UdpServer> usvr = make_unique<UdpServer>(port, [&r, &tp](int sockfd, const string &messages, InetAddr &peer)
                                                        { task_t t = bind(&Route::MessageRoute, &r, sockfd, messages, peer); 
                                                         tp->Enqueue(t); });
    usvr->Init();
    usvr->Start();
    return 0;
}